package 力扣.树.中序遍历;

public class 验证二叉搜索树98 {
    /**
     * 二叉搜索树的中序遍历性质：即一个非递减的有序序列
     */

    public boolean isValidBST(TreeNode root) {
          midDfs(root);
          return teans;
    }
    private  Boolean teans = true;
    private Long pre = Long.MIN_VALUE;
    private void midDfs(TreeNode root){
        if (root == null || !teans){
            return;
        }
        midDfs(root.left);
        if (root.val <= pre){
            teans =false;
            return;
        }
        pre = Long.valueOf(root.val);
        midDfs(root.right);
    }
    boolean ans = true;
    Long preValue = Long.MIN_VALUE;
    private void midOrder(TreeNode root) {
        if (!ans){
            return;
        }
        if (root != null){
            midOrder(root.left);
            if (root.val <= preValue){
                ans = false;
                return;
            }
            preValue = Long.valueOf(root.val);
            midOrder(root.right);
        }
    }
    public boolean isValidBST2(TreeNode root) {
        ans = true;
        // 注意，为了防止root.val取到最小值INT_MIN
        // 这里需要初始化为64位的最小值。
        preValue = Long.MIN_VALUE;
        midOrder(root);
        return ans;
    }

}
